package jwebtest;

import java.math.BigDecimal;

public class test {
	public static void main(String[] args) {
		// 用例1：入箱与拆箱
		// Integer、Short、Byte、Character、Long这几个包装类的valueOf方法的实现是类似的；
		// Double、Float的valueOf方法的实现是类似的。
		// Boolean的valueOf方法的实现是个三目运算，形如` return (b ? TRUE : FALSE); `
		Integer i1 = 128; 
		Integer i2 = 128;
		Integer i3 = 127;
		Integer i4 = 127;
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
		// 用例2：注意数据范围
		int s = 1;
		for (int i = 10; i <= 42; i++) {
			s = s * i;
			// System.out.println(s+"=="+Integer.toBinaryString(s));
		}
		System.out.println(s);

		// 用例3：不要相信 get/Select，要保证操作原子性
		Thread t = new Thread() {
			int count = 0;
			private BigDecimal money = BigDecimal.ZERO;

			public BigDecimal getMoney() {
				return money;
			}

			public void setMoney(BigDecimal money) {
				this.money = money;
			}

			@Override
			public void run() {
				try {
					BigDecimal curM = getMoney();
					curM = curM.add(BigDecimal.ONE);
					// Thread.sleep(10);
					setMoney(curM);
					System.out.println(++count + ":getMoney=" + getMoney().toPlainString());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
		for (int i = 0; i < 100; i++) {
			new Thread(t).start();
		}
		// 用例4：涉及到小数操作，不允许出现float double浮点数类型
		System.out.println(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1);
		System.out.println(0.1 * 10);
	}
}
